关于ReplSet成员必须为奇数的情况说明。
ReplSet优势:Replica Set是增加冗余及提升MongoDB数据集群性能的有效途径。数据在所有的节点中被复制,并选出一个作为主节点。假如主节点出故障,那么会在其他的节点中票选一个作为新的主节点。
问题:在MongoDB中同一个RepliSet中的成员数量不能是偶数个。
假如你使用了偶数个成员,那么当主节点发生故障时那么其它的节点都会变成只读。此时呢,无法选出PRIMARY节点。发生这种情况是因为剩下待选节点的数目不满足票选主节点的规定。
结论:目前的MongoDB版本中,使用ReplSet机制成员数量必须控制在奇数数目个。
以上是网上的结论,实际做测试发现网上的说法有误!
此文章中第二页有提到这个观点:MongoDB Master:MongoDB“诟病”分析
测试结论:当ReplSet成员是2个时,PRIMARY挂了,的确SECONDARY无法升级为PRIMARY;但是,当ReplSet成员是4个时,PRIMARY挂了,SECONDARY的确是可以升级为PRIMARY的。
当然,测试只是针对ReplSet成员为偶数情况;奇数情况是没有问题的。